package org.zhaya.sdk;

import io.logz.sawmill.Pipeline;
import io.logz.sawmill.ProcessResult;
import io.logz.sawmill.Processor;
import org.zhaya.sdk.swamill.ProcessDoc;

/**
 * 自定义组件拦截器
 *
 * @author gleen
 */
public interface ProcessorInterceptor {

    /**
     * 前置方法
     *
     * @param processor
     * @param doc
     * @param pipeline
     */
    void onBefore(Processor processor, ProcessDoc doc, Pipeline pipeline);

    /**
     * 后置方法
     *
     * @param processor
     * @param doc
     * @param pipeline
     * @param processResult
     */
    void onAfter(Processor processor, ProcessDoc doc, Pipeline pipeline, ProcessResult processResult);

    /**
     * 抛出异常后调用
     *
     * @param processor
     * @param doc
     * @param pipeline
     * @param e
     */
    void onThrowing(Processor processor, ProcessDoc doc, Pipeline pipeline, Exception e);

    /**
     * 执行优先级 0~Integer.MAX_VALUE
     * 0 优先级最高(默认)
     * Integer.MAX_VALUE 优先级最低
     */
    default int getOrder() {
        return 0;
    }

    /**
     * 拦截器状态
     * true-开启（默认）
     * false-关闭
     *
     * @return
     */
    default boolean getState() {
        return true;
    }

}